package cn.doitedu.javase.socket.demo1;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 协议：
 *    客户端和服务端之间收发的数据都是  字符串
 *    每条信息没有开头标记
 *    每条信息由一个结束标记： 换行
 */
public class _01_socket通信最基本示例_服务端 {
    public static void main(String[] args) throws IOException {

        // 向操作系统注册绑定一个端口
        ServerSocket serverSocket = new ServerSocket(9099);

        // 等待客户端请求
        // 本方法是一个阻塞方法，等待到有客户端来请求为止
        // 一旦有客户端来请求，该方法就返回一个socket对象，代表底层tcp/ip层为我们建立的连接
        Socket socket = serverSocket.accept();


        // 接下来，可以利用这个连接来跟客户端进行通信（收、发数据）
        InputStream inputStream = socket.getInputStream();  // 输入网络字节流，用来读数据（收数据）
        OutputStream outputStream = socket.getOutputStream(); // 输出网络字节流，用来写数据（发数据）


        // 把输入字节流，包装成BufferedReader，直接可以按行操作
        BufferedReader br = new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));

        String line = br.readLine();
        System.out.println("收到客户端发送的数据:==> " + line);

        // 向客户端响应数据
        outputStream.write("我是你的黄花菜 \n".getBytes("UTF-8"));
        outputStream.flush();


        // 通信结束，关闭各种资源
        outputStream.close();
        inputStream.close();

        socket.close();

    }
}
